#include<stdio.h>
#include<windows.h>
#include<string.h>

//字符串 双引号引起来的一串字符,字符串实际上是使用空字符 \0 结尾的一维字符数组,\0不算字符串内容
//strlen 是函数，sizeof 是运算操作符，二者得到的结果类型为  unsigned int 类型。sizeof 计算的是变量的大小，不受字符 \0 影响；而 strlen 计算的是字符串的长度，以 \0 作为长度判定依据。
int main()
{
  char arr1[] = "hello";
  printf("arr1[] = %s    strlen=%d\t",arr1,strlen(arr1));   //字符串长度=5
  printf("sizeof=%d\n",sizeof(arr1));  // sizeof(hello\0) = 6
  for(int i=0;i<strlen(arr1);i++  )
  {
    printf("%c\n",arr1[i]);
  }


  char arr2[] ={'h','e','l','l','o'};
  printf("arr2[] = %s   strlen=%d\t",arr2,strlen(arr2));   //无结束标志，长度不定
  printf("sizeof=%d\n",sizeof(arr2));  // 占用空间不定
  for(int i=0;i<strlen(arr2);i++  )
  {
    printf("%c\n",arr2[i]);
  }

  char arr3[] ={'h','e','l','l','o','\0'};  //没有在字符数组最后增加 \0 的话输出结果有误
  printf("arr3[] = %s   strlen=%d\t",arr3,strlen(arr3));   //字符串长度=5
  printf("sizeof=%d\n",sizeof(arr3));  // sizeof(hello\0) = 6
  for(int i=0;i<strlen(arr3);i++  )
  {
    printf("%c\n",arr3[i]);
  }






  char s1[]="hello";
  char s2[]="world!";

  strcpy(s1,s2);  //复制字符串 s2 到字符串 s1。
  printf("%s\n",s1); 

  char s3[]="hello";
  char s4[]="world!";
  strcat(s3,s4);  //连接字符串 s3 到字符串 s4 的末尾。
  printf("%s\n",s3); 
  printf("%ld\n",strcmp(s1,s3));  //如果 s3 和 s4 是相同的，则返回 0；如果 s1<s2 则返回小于 0；如果 s1>s2 则返回大于 0。
  printf("%ld\n",strchr(s1,'!'));  //返回一个指针，指向字符串 s1 中字符 ch 的第一次出现的位置。


  system("pause");
}